Skip to content

chore: 배포 설계 문서 · 운영 이미지 Dockerfile · CI 이미지 빌드 확인 (#88) - #97

Open
chjpooh2002 wants to merge 3 commits into
developfrom
chore/88-deploy-design
Open

chjpooh2002 wants to merge 3 commits into
developfrom
chore/88-deploy-design

Conversation

@chjpooh2002

Copy link
Copy Markdown
Contributor

관련 이슈

작업 내용

배포 설계 문서 (docs/deploy-design.md)

운영 이미지 (Dockerfile, .dockerignore)

  • 빌드 단계·실행 단계 분리, 자바 21(temurin noble), 기본 이미지는 태그 + 다이제스트 고정
  • 빌드 단계는 빌드하는 기계의 아키텍처에서 실행, 실행 단계에는 RUN이 없음 → x86에서도 에뮬레이터 없이 arm64(EC2 t4g) 이미지 빌드
  • jar를 층별(의존성 → 로더 → 앱)로 풀어 넣어 코드만 바뀌면 마지막 층만 다시 받음
  • 비루트 실행(기본 이미지의 uid 1000), TZ=Asia/Seoul
  • JVM 메모리 옵션은 실행 시 JAVA_TOOL_OPTIONS로 받음 ([chore] 서버 실행 구성: compose 운영 파일·Caddy·배포 스크립트(상태 확인·되돌리기) #92)

CI (ci.yml)

  • 기존 빌드와 나란히 도는 image 작업 추가: x86 실행기에서 arm64 이미지 빌드 확인(푸시 없음)
  • 새 액션 docker/setup-buildx-action@v4: 다른 아키텍처 빌드용 빌더 설정

명세와 달라진 점

없음 (API 변경 없음)

테스트

  • 로컬 이미지 빌드 → local 프로필 + compose MySQL로 실행 → /actuator/health UP (10.7초 기동)
  • 컨테이너 안 id → uid=1000(ubuntu), date → KST, 로그 시각 +09:00
  • docker buildx build --platform linux/arm64 성공, 이미지 아키텍처 arm64 확인
  • ./gradlew build 통과

확인 체크리스트

  • ./gradlew build 통과
  • 테스트 포함 — 코드 변경 없음 (이미지 실행 확인은 위 테스트 항목)
  • 변경 400줄 안팎 — 443줄, 그중 설계 문서가 372줄 (코드·설정은 71줄)
  • 병합된 마이그레이션 수정 안 함
  • 비밀 값·개인정보 없음
  • global 공통 코드 변경 없음

리뷰어에게

  • 비루트 사용자를 새로 만들지 않고 기본 이미지의 ubuntu(uid 1000)를 쓴 이유: 사용자를 만들면 실행 단계에 RUN이 생겨 arm64 빌드에 에뮬레이터가 필요해집니다
  • 설계 문서 11절 "정한 것"을 봐 주세요 (유료 전환, 예산, 앱 전용 DB 계정 등)
  • 새 CI image 작업이 이 PR에서 처음 실행됩니다

@chjpooh2002 chjpooh2002 added chore 설정·빌드·의존성 docs 문서 (명세, ERD, CLAUDE.md) infra AWS, 테라폼, 배포, CI labels Nov 11, 2026
@chjpooh2002 chjpooh2002 self-assigned this Nov 13, 2026

@oTAETAEo oTAETAEo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 👏

배포 설계를 보면서 우아한 종료 쪽을 좀 생각해 봤습니다 !
스프링 부트는 기본으로 우아한 종료가 켜져 있고 단계별로 30초를 기다리는것으로 알고 있는데, compose의 정지 유예 기본값은 10초로 보입니다.

이 상태로 배포하면 AI 톤 교정같은 긴 요청이 중간에 끊기고, 사용량도 반환되지 않을 수 있습니다.

그래서 컨테이너 정지 부분을 앱의 종료 대기 시간 이상으로 맞추고, 교체 할때 때 구 컨테이너가 진행 중인 요청을 마무리한 뒤 내려가는 순서가 필요하다고 생각이 들었습니당

다른 이슈 부분에 진행 중 요청 마무리와 교대 순서가 들어가 있는것으로 봐서 이 부분은 후속 이슈에서 다루면 괜찮을 것 같습니다 !,

두 컨테이너가 뜰때도 생각을 해 봤는데 이미 후속 이슈에 있어서 괜춘할것 같읍니당 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore 설정·빌드·의존성 docs 문서 (명세, ERD, CLAUDE.md) infra AWS, 테라폼, 배포, CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[chore] Dockerfile·이미지 빌드 확인 + 배포 설계 문서

2 participants